package com.ecr.hub.front.bean.managed;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.ecr.hub.ApplicationException;
import com.ecr.hub.DaoApplicationException;
import com.ecr.hub.front.bean.AbstractManagedBean;
import com.ecr.hub.model.HubReportData;
import com.ecr.hub.service.reporting.IReportingManager;

@Controller("reportManaged")
@Scope("request")
public class ReportingManagedBean extends AbstractManagedBean {

	private static final long serialVersionUID = 1L;

	// Un objet pour éviter la prolifération de variables.
	private transient Criterion criterion;
	// Affiche ou non les liens csv dans la page xhtml.
	private boolean displayCsv;
	// La liste des statistiques à afficher.
	List<HubReportData> lstReports;

	// Ressource pour les statistiques.
	@Resource(name = "reportManager")
	private transient IReportingManager reportManager;

	/**
	 * Constructeur.
	 */
	ReportingManagedBean() {
		criterion = new Criterion();
	}

	/**
	 * Création du/des fichier(s) CSV pour alimenter des applications de
	 * reporting avec les données brutes de la base de données.
	 */
	public void createCsvReporting() {

		try {
			setLstReports(reportManager.createCsvReporting(getCriterion()
					.getDate(), getCriterion().getDateEnd(), LoginManagedBean
					.getConnectedUser()));

			setDisplayCsv(true);
		} catch (DaoApplicationException e) {
			getErrorHandler(e);
		} catch (ApplicationException e) {
			getErrorHandler(e);
		}
	}

	// *******************************
	// Les getters et les setters.
	// *******************************

	public Criterion getCriterion() {
		return criterion;
	}

	public void setCriterion(Criterion criterion) {
		this.criterion = criterion;
	}

	public boolean isDisplayCsv() {
		return displayCsv;
	}

	public void setDisplayCsv(boolean displayCsv) {
		this.displayCsv = displayCsv;
	}

	public List<HubReportData> getLstReports() {
		return lstReports;
	}

	public void setLstReports(List<HubReportData> lstReports) {
		this.lstReports = lstReports;
	}
}
